package foroweb.ejb;

import foroweb.entidades.*;
import java.util.*;
import javax.ejb.*;
import javax.persistence.*;

@Stateless
@LocalBean
public class Busquedas implements InterfaceBusquedas{

    //Atributos
    @PersistenceContext
    EntityManager em;

    //Metodos
    public List<Mensaje> buscarMensajes(String s,Usuario u,Date fi,Date ff){
        String consulta="select m from Mensaje m where m.id=m.id";
        Map<String,Object> parameters=new HashMap<String,Object>();
        if(s!=null){
            consulta=consulta+" and m.texto like '%"+s+"%'";
        }
        if(u!=null){
            consulta=consulta+" and m.usuario=:usuario";
            parameters.put("usuario",u);
        }
        if(fi!=null){
            consulta=consulta+" and m.fecha>=:fecha_inicial";
            parameters.put("fecha_inicial",fi);
        }
        if(ff!=null){
            consulta=consulta+" and m.fecha<=:fecha_final";
            parameters.put("fecha_final",ff);
        }
        Query query=em.createQuery(consulta);
        Set<String> ss=parameters.keySet();
        Iterator i=ss.iterator();
        String par=null;
        while(i.hasNext()){
            par=(String)i.next();
            query.setParameter(par,parameters.get(par));
        }
        return query.getResultList();
    }
    public List<Usuario> buscarUsuarios(String s){
        Query query=em.createQuery("select u from Usuario u where u.nick like '%"+s+"%'");
        return query.getResultList();
    }
    public Usuario buscarMail(String s){
        Query query=em.createQuery("select u from Usuario u where u.email='"+s+"'");
        try{
            return (Usuario)query.getSingleResult();
        }catch(NoResultException nre){
            return null;
        }
    }
    public Object buscarPerfil(String s){
        return em.find(Perfil.class, s);
    }
    public List<Seccion> buscarSecciones(String s){
        Query query=em.createQuery("select s from Seccion s where s.nombre like '%"+s+"%'");
        return query.getResultList();
    }

    //Polimorfismo
    @Override
    public Usuario buscarUsuario(String s){
        return em.find(Usuario.class,s);
    }
    @Override
    public Hilo buscarHilo(long id){
        return em.find(Hilo.class, id);
    }
    @Override
    public Seccion buscarSeccion(String s){
        return em.find(Seccion.class, s);
    }
    @Override
    public Mensaje buscarMensaje(long id){
        return em.find(Mensaje.class, id);
    }
}
